/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.Vector;

/**
 *
 * @author Administrator
 */
public class Pagos {
    private String descripcionPago,  estadoPago,  fechaVencimientoPago,
            fechaCancelacionPago,  numeroReciboPago;
    private double montoAcuerdoPago;

    /**
     * @return the descripcionPago
     */
    public String getDescripcionPago() {
        return descripcionPago;
    }

    /**
     * @param descripcionPago the descripcionPago to set
     */
    public void setDescripcionPago(String descripcionPago) {
        this.descripcionPago = descripcionPago;
    }

    /**
     * @return the estadoPago
     */
    public String getEstadoPago() {
        return estadoPago;
    }

    /**
     * @param estadoPago the estadoPago to set
     */
    public void setEstadoPago(String estadoPago) {
        this.estadoPago = estadoPago;
    }

    /**
     * @return the fechaVencimientoPago
     */
    public String getFechaVencimientoPago() {
        return fechaVencimientoPago;
    }

    /**
     * @param fechaVencimientoPago the fechaVencimientoPago to set
     */
    public void setFechaVencimientoPago(String fechaVencimientoPago) {
        this.fechaVencimientoPago = fechaVencimientoPago;
    }

    /**
     * @return the fechaCancelacionPago
     */
    public String getFechaCancelacionPago() {
        return fechaCancelacionPago;
    }

    /**
     * @param fechaCancelacionPago the fechaCancelacionPago to set
     */
    public void setFechaCancelacionPago(String fechaCancelacionPago) {
        this.fechaCancelacionPago = fechaCancelacionPago;
    }

    /**
     * @return the numeroReciboPago
     */
    public String getNumeroReciboPago() {
        return numeroReciboPago;
    }

    /**
     * @param numeroReciboPago the numeroReciboPago to set
     */
    public void setNumeroReciboPago(String numeroReciboPago) {
        this.numeroReciboPago = numeroReciboPago;
    }

    /**
     * @return the montoAcuerdoPago
     */
    public double getMontoAcuerdoPago() {
        return montoAcuerdoPago;
    }

    /**
     * @param montoAcuerdoPago the montoAcuerdoPago to set
     */
    public void setMontoAcuerdoPago(double montoAcuerdoPago) {
        this.montoAcuerdoPago = montoAcuerdoPago;
    }

    public static Vector<Pagos> pagosAlumnosPorCodigo(int cod_persona){
        Vector<Pagos> LPagos = new Vector<Pagos>();
        Pagos oPagos = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = " SELECT  rpt.detalle,  " +
                     "CASE WHEN rpt.exonerado = TRUE THEN 'Exonerado'  " +
                     "WHEN rpt.cancelado = TRUE THEN 'Cancelado'  " +
                     "ELSE 'Deuda'  END AS estado,  TO_CHAR(rpt.fecha_vencimiento,'DD/MM/yyyy') as fechaVencimiento,  " +
                     "TO_CHAR(rpt.fecha_cancelacion,'DD/MM/yyyy') as fechaCancelacion,  " +
                     "CASE WHEN rpt.nro_recibo = 0 THEN ''  ELSE TO_CHAR(rpt.nro_talonario,'0000') || '-' || TO_CHAR(rpt.nro_recibo,'000000')  END AS Recibo,  " +
                     "rpt.monto_acuerdo  " +
                     "FROM rptpagos rpt  " +
                     "WHERE rpt.anno = CAST(YEAR(?) AS INTEGER)  " +
                     "AND rpt.cod_alumno IN ( 	SELECT a.cod_alumno     " +
                        "FROM alumno a     " +
                        "WHERE a.cod_persona = ?)  " +
                     "ORDER BY rpt.fecha_vencimiento, rpt.detalle;" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, cod_persona);
            ps.setInt(2, cod_persona);
            rs = ps.executeQuery();
            while(rs.next()){
                oPagos = new Pagos();
                oPagos.setDescripcionPago(rs.getString(1));
                oPagos.setEstadoPago(rs.getString(2));
                oPagos.setFechaVencimientoPago(rs.getString(3));
                oPagos.setFechaCancelacionPago(rs.getString(4));
                oPagos.setNumeroReciboPago(rs.getString(5));
                oPagos.setMontoAcuerdoPago(rs.getDouble(6));
                LPagos.add(oPagos);
            }
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LPagos;
    }

       public static double  DeudaAlumnosPorCodigo(int cod_persona){
        double deudaTotal = 0;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = " SELECT CASE WHEN SUM(rpt.monto_acuerdo)IS NULL THEN '0' END as DEUDA  " +
                     "FROM rptpagos rpt  WHERE rpt.anno = CAST(YEAR(?) AS INTEGER)  " +
                     "AND rpt.cod_alumno IN ( 	SELECT a.cod_alumno     " +
                        "FROM alumno a     " +
                        "WHERE a.cod_persona = ?)  AND rpt.exonerado = FALSE " +
                        "AND rpt.cancelado = FALSE" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, cod_persona);
            ps.setInt(2, cod_persona);
            rs = ps.executeQuery();
            while(rs.next()){
                deudaTotal = rs.getDouble(1);
            }
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return deudaTotal;
    }

}
